﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace T68Control.T68
{
    public class FileCopyService
    {
        /// <summary>
        /// 拷贝指定时间前创建的文件到目标目录
        /// </summary>
        /// <param name="sourceRoot">源目录根路径</param>
        /// <param name="targetRoot">目标目录根路径</param>
        /// <param name="timeThreshold">时间阈值，拷贝此时间之前创建的文件</param>
        /// <param name="filePattern">文件匹配模式，默认为所有文件</param>
        /// <returns>拷贝成功的文件数量</returns>
        public static int CopyFilesOlderThan(string sourceRoot, string targetRoot, DateTime timeThreshold, string filePattern = "*.*")
        {
            int copiedCount = 0;

            try
            {
                // 获取所有符合条件的文件
                var files = Directory.GetFiles(sourceRoot, filePattern, SearchOption.AllDirectories)
                    .Where(f => File.GetCreationTime(f) <= timeThreshold);

                foreach (var sourceFile in files)
                {
                    try
                    {
                        // 计算相对路径
                        string relativePath = sourceFile.Substring(sourceRoot.Length).TrimStart('\\');
                        string targetFile = Path.Combine(targetRoot, relativePath);
                        string targetDir = Path.GetDirectoryName(targetFile);

                        // 创建目标目录（如果不存在）
                        if (!Directory.Exists(targetDir))
                        {
                            Directory.CreateDirectory(targetDir);
                            Console.WriteLine($"创建目录: {targetDir}");
                        }

                        // 拷贝文件（覆盖已存在的文件）
                        File.Copy(sourceFile, targetFile, true);
                        Console.WriteLine($"已拷贝: {sourceFile} -> {targetFile}");
                        copiedCount++;
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine($"处理文件 {sourceFile} 时出错: {ex.Message}");
                    }
                }

                Console.WriteLine($"操作完成，共拷贝 {copiedCount} 个文件");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"扫描目录时出错: {ex.Message}");
            }

            return copiedCount;
        }
    }
}